(() => {

    // 类实现接口
    // 接口可以继承接口
    // 接口可以集成类

    // 1.定义A类
    class A {
        private state: string
    }
    // A接口继承A类
    interface AInterface extends A {
        select(): void
    }
    // B类继承A类,实现A接口
    class B extends A implements AInterface {
        select() { }
    }
    // C类继承A类
    class C extends A {
    }
    // 报错, 因为Ainterface继承A，那么D实现AInterface的时候，必须实现state属性
    // 但是state属性1又是私有的，所以无法实现
    // class D implements AInterface {
    //     // state: 'D类'
    //     select() { }
    // }


    // 2.接口继承类
    class Point {
        x: number
        y: number
        constructor(x: number, y: number) {
            this.x = x
            this.y = y
        }
    }
    interface PointInterface {
        x: number
        y: number
    }

    // 接口继承类
    // 有这样的写法，但是一般不这样写
    // interface Point3D extends Point {
    //     z: number
    // }
    // 接口继承接口
    interface Point3D extends PointInterface {
        z: number
    }

    let point: Point3D = {
        x: 1,
        y: 1,
        z: 1
    }
    console.log(point);
})()